package com.example.spider.config.support.method;

import jakarta.annotation.Nullable;
import org.springframework.core.MethodParameter;

/**
 * <p>参数解析器</p>
 * <p>spring 多处定义了 ArgumentResolver、ReturnValueHandler，设计思想、类名、类职责、方法名均相同，唯一不同的是 resolveArgument 后的参数，
 * 这里抽出了 params ，比spring模型更抽象、更通用，不必加载一堆职责功能相似的接口</p>
 *
 * @see org.springframework.web.method.support.HandlerMethodArgumentResolver
 * @see org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver
 * @see org.springframework.messaging.handler.invocation.reactive.HandlerMethodArgumentResolver
 * @see org.springframework.web.method.support.HandlerMethodReturnValueHandler.....
 */
public interface MethodArgumentResolver {

	boolean supportsParameter(MethodParameter parameter);

	@Nullable
	Object resolveArgument(MethodParameter parameter, Object... params) throws Exception;

}